class Solution {
public:
    int getMaxLen(vector<int>& nums) {

        int n = nums.size();
        vector<int> f(n + 1, 0), g(n + 1, 0);

        for (int i = 1; i <= n; i++)
        {
            if (nums[i - 1] > 0)
            {
                if (f[i - 1] > 0)
                    f[i] = f[i - 1] + 1;
                else
                    f[i] = 1;

                if (g[i - 1] > 0)
                    g[i] = g[i - 1] + 1;
                else
                    g[i] = 0;
            }
            else if (nums[i - 1] < 0)
            {
                if (g[i - 1] > 0)
                    f[i] = g[i - 1] + 1;
                else
                    f[i] = 0;

                if (f[i - 1] > 0)
                    g[i] = f[i - 1] + 1;
                else
                    g[i] = 1;
            }
            else
            {
                f[i] = 0;
                g[i] = 0;
            }
        }

        int res = f[1];
        for (int i = 1; i <= n; i++)
            res = max(res, f[i]);

        return res;
    }
};